package com.jie.common.ssl.util;

import com.jie.common.util.BytesUtil;

/**
 * 用于摘要的工具类
 * @author XieZhiJie
 * @date 2022/04/21 15:46
 */
public class DigestUtil {

    /**
     * 通过sha1算法生成摘要
     * @param original 原字节数组
     * @return         返回摘要字节数组
     */
    public static byte[] generateDigest(byte[] original) {
        return cn.hutool.crypto.digest.DigestUtil.sha1(original);
    }

    /**
     * 给一个字节数组添加上摘要, 使用SHA1算法
     * @param original 原字节数组
     * @return         返回加上摘要后的字节数组, 同时需要记录原文多长
     */
    public static byte[] addDigest(byte[] original) {
        byte[] digest = generateDigest(original);
        return BytesUtil.packageTwoBytesWithLengthBytes(original, digest);
    }

    /**
     * 验证摘要
     * @param digest     摘要
     * @param bytesArray 字节数组数组, 将这些数组拼接起来并生成一个摘要, 将其与digest对比
     * @return           对比成功返回true, 否则返回false
     */
    public static boolean verifyDigest(byte[] digest, byte[] ...bytesArray) {
        byte[] original = BytesUtil.packetBytes(bytesArray);
        byte[] newDigest = generateDigest(original);
        return BytesUtil.compareBytesAndBytesArray(digest, newDigest);
    }

}
